"""
day3 接口自动化测试框架.py
1.配置层   config  conf    env

    ip   port  URL

    数据库信息
    ==============================================================
        import os

        # 存放环境信息
        IP = "192.168.1.231"
        PORT = "8080"
        URL = "http://"+IP+":"+PORT

        # 数据库
        DB_ENV={
                    "uesrname":"root",
                    "password":"123456",
                    "port":3306
                }

        # 项目的 日志文件路径  报告路径

        # 项目的根目录
        BASE_DIR = os.path.dirname(os.path.dirname(__file__))
        # 日志目录
        LOG_DIR = os.path.join(BASE_DIR,"log")
        # 报告目录
        REPORT_DIR = os.path.join(BASE_DIR,"report")

        if __name__ == '__main__':
            print(os.path.dirname(os.path.dirname(__file__)))
            print(LOG_DIR,REPORT_DIR)
        =================================================
2. 通用层   comm util
    读写csv文件 ， 处理 log日志 ，读写数据库  ， basepage  ， base_request
    读写 yaml 文件 ，
    读写log
    ================
    import logging.handlers
    import os.path
    import time
    from config.conf import API_LOG_DIR
    import colorlog   # 对日志信息进行颜色划分输出

    log_colors_config = {
        'DEBUG': 'white',
        'INFO': 'green',
        'WARNING': 'yellow',
        'ERROR': 'red',
        'CRITICAL': 'bold_red',
    }
    # 创建日志管理器

    log = logging.getLogger('api')#
    # 准备时间字符串,用在log文件名
    #daytime = time.strftime('%Y-%m-%d_%H-%M-%S')
    daytime = time.strftime('%Y-%m-%d')

    # 项目根目录下 的 log 文件夹

    if not os.path.exists(API_LOG_DIR):
        os.makedirs(API_LOG_DIR)
        print("目录已经创建")
        # 目录不存在时创建 目录
    # 创建文件日志的路径文件名
    filename = API_LOG_DIR + f'/run_api_log_{daytime}.log'
        # 命令台 输出对象
    # 创建命令台处理器
    sh = logging.StreamHandler()
    # 创建文件处理器
    # when 是 日志分割标志
    # interval 一天生成一个
    # 日志的数量 控制 30
    fh = logging.handlers.TimedRotatingFileHandler(filename, when='midnight', interval=1, backupCount=15,encoding='utf-8')
    # 文件日志的格式
    fmt = "[%(levelname)s] [%(asctime)s.%(msecs)03d] : %(message)s : %(filename)s -> %(funcName)s line:%(lineno)d"
    # 命令台的日志格式
    smt = "[%(levelname)s] %(log_color)s [%(asctime)s.%(msecs)03d] : %(message)s : %(filename)s -> %(funcName)s line:%(lineno)d"
        # 日志级别设置, 命令台日志 和 文件日志级别,可以不同,进行单独设置,设置冲突时,谁高以谁为准

    # 利用日志格式,生成 文件 和日志格式处理器
    file_formatter = logging.Formatter(fmt, datefmt='%Y_%m_%d %H:%M:%S')
    console_formattre = colorlog.ColoredFormatter(smt,datefmt='%Y_%m_%d %H:%M:%S',log_colors=log_colors_config)

    sh.setFormatter(console_formattre)
    fh.setFormatter(file_formatter)

    log.setLevel(logging.ERROR)
    fh.setLevel(logging.DEBUG)
    sh.setLevel(logging.DEBUG)

    # 垃圾回收
    if not log.handlers:
        log.addHandler(sh)
        log.addHandler(fh)

    sh.close()
    fh.close()

    if __name__ == '__main__':
        # 初始化系统日志文件
        # init_log_config("aa.log")
        log.debug("我是一个debug级别的日志")
        log.info("我是一个info级别的日志")
        log.error("我是一个error级别的日志")
        log.warning("我是一个warning级别的日志")
        log.critical("我是一个critical级别的日志")
        a = 100
        # 输出变量时候 ，一定要加入 f 。
        log.info(f"输出变量 a = {a}")
        ===================================================

    yaml_tools
    ===========================================================

    aa = [
        {"title":"1.输入正确的用户名和密码,登录成功","username":"admin","password":"123456","expect":"签退"},
        {"title":"2.输入空的用户名和正确的密码密码,登录失败","username":"","password":"123456","expect":"登录失败，请检查您的成员名或密码是否填写正确。"},
        {"title":"3.输入正确的用户名和空的密码密码,登录失败","username":"admin","password":"","expect":"登录失败，请检查您的成员名或密码是否填写正确。"}
    ]
    import yaml
    import os
    from conf.env import BASE_DIR


    class YamlTools:

        @staticmethod
        def get_project_path():
            cf = os.path.realpath(__file__)  # 获取当前文件的路径

            cd = os.path.dirname(cf)  # 获取当前文件目录的路径  caw
            cdd = os.path.dirname(cd)  # 获取 cd目录的上一级目录
            # print(cf,cd,cdd+"\\")
            return cdd + "\\"

        @staticmethod
        def read_yaml_file(path):
            path = YamlTools.get_project_path() + "\\testdata\\" + path  # 组合项目内的地址
            print(path)
            with open(path, "r", encoding='utf-8') as f:
                content = f.read()
                # 把yaml 文件 中的数据 转换为 python的 列表 或者 字典格式
                a = yaml.load(content, Loader=yaml.FullLoader)
                return a

        @staticmethod
        def write_yaml_file(data, filename):
            path = BASE_DIR + "\\testdata\\"
            filename = path + filename
            print(filename)
            with open(filename, 'w', encoding='utf-8') as file:
                yaml.dump(data, file, allow_unicode=True)


    if __name__ == '__main__':
        # 1.把python数据写入yaml文件。
        # YamlTools.write_yaml_file(aa, "aaa.yaml")


        # 2. 把yaml中数据读取到python的数据结构中 ， 列表 和 字典
        aa = YamlTools.read_yaml_file('aaa.yaml')  # 给出项目内的相对地址。
        print(aa)
        print(aa[1])
    ===========================================================

3.测试数据层  testdata
    放一些  测试数据文件    yaml格式文件  ，用yaml文件存放测试用例数据

4.测试脚本层  testcases
    存放 以test开头的测试脚本。  py

python  + pytest + request + allure

安装            pytest ，pytest-html ，allure-pytest ，pytest-rerunfailures
pip install







"""
import pytest


